/**
 * 树工具函数
 */

// 默认参数
const treePropsDefault = {
  children: 'children',
  label: 'label',
  attr: 'attr'
}

// 生成节点
function makeNode(tree, props) {
  // 结果数组
  let result = []
  if (Array.isArray(tree)) {
    tree.forEach( t => {
      // 节点基本属性
      let node = {
        id: t.id,
        label: t[props.label]
      }
      // 节点其他属性
      if (t.hasOwnProperty(props.attr)) {
        node = {...node, ...t[props.attr]}
      }
      // 子节点数组
      if (t.hasOwnProperty(props.children) && Array.isArray(t[props.children]) && t[props.children].length > 0) {
        node.children = makeNode(t[props.children], props)
      }
      result.push(node)
    })
  }
  return result
}

// 格式化树
export function treeFormat(tree, props = {}) {
  // 合并参数
  let mergedProps = {
    ...treePropsDefault,
    ...props
  }
  return makeNode(tree, mergedProps)
}

export function findParentObj(arr, result) {
  for (let i = 0; i < arr.length; i++) {
    if (arr[i].path == result) {
      return arr[i];
    } else {
      if (arr[i].children && arr[i].children.length) {
        const res = findParentObj(arr[i].children, result);
        if (res) {
          return res;
        }
      }
    }
  }
  return null;
};